ホームに戻る
出典 :
関連 :
目次 :
DateTime / TimeSpan 型とは
System.DateTime : 時刻(日付を含む)を取り扱うクラス
System.TimeSpan : 時間(間隔)を取り扱うクラス
両者には相関がある。以下、コード例はいずれもC#における実装。
DateTime
// 初期化 (複数のオーバーロードあり)
DateTime dt1 = new DateTime(2020, 6, 20, 18, 45, 3); //< 日時 2020年 6月20日 18時45分 3秒 を表現
DateTime dt2 = new DateTime(2020, 8, 18, 15, 20, 59); //< 日時 2020年 8月18日 15時20分59秒 を表現
DateTime dt3 = new DateTime(); //< 日時 0001年 1月 1日 0時00分00秒 を表現
// 文字列に変換
Console.WriteLine(dt1.ToString()); //< 書式指定なし ⇒ "2020/06/20 18:45:03"
Console.WriteLine(dt1.ToString("yyyyMMdd_HHmmss")); //< 書式指定 ⇒ "20200620_184503"
Console.WriteLine(dt1.ToString("yyyy/MM/dd HH:mm:ss.fff")); //< 書式指定(ミリ秒まで表示) ⇒ "2020/06/20 18:45:03.000"
Console.WriteLine(dt1.ToString("yyyy/M/d HH:mm:ss")); //< 書式指定(月・日のゼロ埋め無し) ⇒ "2020/6/20 18:45:03"
// 各要素の抽出
Console.WriteLine(dt1.Hour); //< 時 ⇒ 18
Console.WriteLine(dt1.DayOfWeek); //< 曜日 ⇒ Saturday
TimeSpan
// 初期化 (複数のオーバーロードあり)
TimeSpan ts1 = new TimeSpan(45, 3, 21, 0); //< 期間 45日 3時間21分0秒 を表現
TimeSpan ts2 = new TimeSpan(); //< 期間 0日 0時間 0分0秒 を表現
// 文字列に変換
Console.WriteLine(ts1.ToString()); //< 書式指定なし ⇒ "45.03:21:00"
Console.WriteLine(ts1.ToString("ddhhmmss")); //< 書式指定 ⇒ "45032100"
Console.WriteLine(ts1.ToString("fff")); //< 書式指定(ミリ秒を表示) ⇒ "000"
Console.WriteLine(ts1.ToString("hh\:mm\:ss\.fff")); //< 書式指定 ⇒ "03:21:00.000"
//< : (コロン)、. (ドット)はエスケープする
// 各要素の抽出
Console.WriteLine(ts1.Hours); //< 時間 ⇒ 3
Console.WriteLine(ts1.Minutes); //< 分 ⇒ 21
Console.WriteLine(ts1.TotalMinutes); //< 合計の分 ⇒ 65001 (小数点以下が発生することもある)
注意が必要な点
TimeSpan 型を文字列に変換する際の書式指定文字列には書式指定子以外の文字( = 記号)はそのままでは使用できず、エスケープするか文字列リテラルとする必要がある。
誤 : "hh:mm:ss" ⇒ コロンをそのまま使用
正 : "hh\:mm\:ss" ⇒ コロンをエスケープ
正 : "hh':'mm':'ss" ⇒ コロンを文字列リテラル化
DateTime / TimeSpan に対する演算
// DateTime 同士の比較
if ( dt1 < dt2 )
{
Console.WriteLine("dt1 は dt2 よりも前です");
}
if ( dt1 == dt2 )
{
Console.WriteLine("dt1 と dt2 は同時刻です");
}
// TimeSpan 同士の比較
if ( ts1 < ts2 )
{
Console.WriteLine("ts1 は ts2 よりも短いです");
}
if ( ts1 == ts2 )
{
Console.WriteLine("ts1 と ts2 は同値です");
}
// DateTime 同士の差分は TimeSpan 型となる
TimeSpan ts3 = dt2 - dt1; //< 差異 : 58日 20時間 35分 56秒
// DateTime に TimeSpan を加減算すると DateTime 型となる
DateTime dt4 = dt1 + ts3; //< 2020年 6月 20日 18時 45分 3秒
//< + 58日 20時間 35分 56秒
//< = 2020年 8月 18日 15時 20分 59秒
// 日付部分のみを取り出す
DateTime dt5 = dt4.Date; //< 2020年 6月 20日 18時 45分 3秒
//< ⇒2020年 6月 20日( 0時 0分 0秒)
// 時刻部分のみを取り出す (TimeSpan 型となる点に注意)
TimeSpan ts4 = dt4.TimeOfDay; //< 2020年 6月 20日 18時 45分 3秒
//< 18時 45分 3秒